Page({
  data: {
    foodId: null,
    food: null,
    count: 1,
    showSpec: false,
    selectedSpec: 0,
    loading: true,
    cartCount: 0,  // 购物车中当前商品的数量
    cartTotal: 0   // 购物车总数量
  },
  
  onLoad: function (options) {
    console.log('详情页onLoad参数:', options);
    
    // 设置初始状态
    this.setData({
      loading: true,
      food: null
    });
    
    // 验证ID参数
    if (options && options.id) {
      const foodId = options.id;
      
      // 验证ID是否为有效值
      if (!foodId || foodId === 'undefined' || foodId === 'null') {
        console.error('无效的食品ID:', foodId);
        wx.showToast({
          title: '无效的商品ID',
          icon: 'none',
          duration: 2000
        });
        
        // 1.5秒后返回上一页
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
        return;
      }
      
      this.setData({
        foodId: foodId
      });
      
      // 获取菜品详情
      this.getFoodDetail(foodId);
    } else {
      console.error('缺少食品ID参数');
      wx.showToast({
        title: '参数错误',
        icon: 'none',
        duration: 2000
      });
      
      // 1.5秒后返回上一页
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },
  
  onShow: function() {
    this.getCartData();
  },
  
  // 获取菜品详情数据
  getFoodDetail: function (id) {
    const self = this;
    wx.showLoading({
      title: '加载中',
    });
    
    const app = getApp();
    app.globalData.api.food.getDetail(id)
      .then(res => {
        console.log('获取到食品详情:', res);
        
        // 首先验证返回的数据格式是否正确
        if (!res) {
          console.error('食品详情数据格式错误: 返回为空');
          wx.showToast({
            title: '数据格式错误',
            icon: 'none'
          });
          self.setData({ loading: false, food: null });
          wx.hideLoading();
          return;
        }
        
        // 对于直接返回对象的情况（没有包装在data字段中）
        let food = res.data || res;
        
        // 确保food是有效对象
        if (!food || typeof food !== 'object') {
          console.error('食品详情数据无效:', food);
          wx.showToast({
            title: '数据格式错误',
            icon: 'none'
          });
          self.setData({ loading: false, food: null });
          wx.hideLoading();
          return;
        }
        
        console.log('处理食品数据:', food);
        console.log('销量相关字段:', {
          sold: food.sold,
          monthly_sales: food.monthly_sales,
          sales: food.sales,
          all_keys: Object.keys(food)
        });
        
        // 处理图片URL
        if (food.image) {
          food.image = app.globalData.api.getFullImageUrl(food.image);
        }
        if (food.get_image) {
          food.get_image = app.globalData.api.getFullImageUrl(food.get_image);
        }
        
        // 处理月销量字段
        // 兼容不同的后端字段名称
        if (food.monthly_sales !== undefined) {
          food.sold = food.monthly_sales;
        } else if (food.sales !== undefined) {
          food.sold = food.sales;
        } else if (food.sold === undefined) {
          // 如果没有任何销量字段，设置默认值
          food.sold = 0;
        }
        
        // 处理好评率字段
        if (food.favorRate === undefined) {
          if (food.rating !== undefined) {
            // 如果有评分，将评分转换为好评率
            // 假设评分是1-5，转换为百分比
            food.favorRate = Math.round(food.rating * 20);
          } else {
            // 默认好评率
            food.favorRate = 100;
          }
        }
        
        // 处理轮播图数据
        if (food.images && Array.isArray(food.images) && food.images.length > 0) {
          // 如果images已经是数组并有数据，确保URL是完整的
          food.images = food.images.map(img => {
            if (typeof img === 'string') {
              return app.globalData.api.getFullImageUrl(img);
            } else if (img.image_url) {
              return {
                ...img,
                image_url: app.globalData.api.getFullImageUrl(img.image_url)
              };
            }
            return img;
          });
        } else if (food.image || food.get_image) {
          // 如果没有轮播图数据但有主图，使用主图作为轮播图
          food.images = [{
            image_url: food.image || food.get_image
          }];
        } else {
          food.images = [];
        }
        
        // 设置默认选中的规格
        let selectedSpec = 0;
        if (food.specs && food.specs.length > 0) {
          // 查找默认规格
          const defaultSpecIndex = food.specs.findIndex(spec => spec.is_default);
          if (defaultSpecIndex !== -1) {
            selectedSpec = defaultSpecIndex;
          }
        }
        
        self.setData({
          food: food,
          selectedSpec: selectedSpec,
          loading: false
        });
      })
      .catch(err => {
        console.error('获取食品详情失败', err);
        self.setData({ 
          loading: false,
          food: null // 确保food为null而不是undefined
        });
        
        wx.showToast({
          title: '获取数据失败',
          icon: 'none'
        });
      })
      .finally(() => {
        // 确保无论成功还是失败都会隐藏加载提示
        wx.hideLoading();
      });
  },
  
  // 获取购物车数据
  getCartData: function() {
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    
    if (!userInfo) return;
    
    app.globalData.api.cart.getList()
      .then(res => {
        const cartItems = res.results || [];
        let cartTotal = 0;
        let cartCount = 0;
        
        cartItems.forEach(item => {
          // 只处理数量大于0的购物车项目
          if (item.count > 0) {
            cartTotal += item.count;
            
            // 如果是当前商品，记录数量
            if (this.data.food && item.food == this.data.food.id) {
              cartCount = item.count;
            }
          }
        });
        
        this.setData({ 
          cartTotal, 
          cartCount 
        });
      })
      .catch(err => {
        console.error('获取购物车数据失败', err);
      });
  },
  
  // 减少数量
  minusCount: function () {
    if (this.data.count > 1) {
      this.setData({
        count: this.data.count - 1
      });
    }
  },
  
  // 增加数量
  addCount: function () {
    this.setData({
      count: this.data.count + 1
    });
  },
  
  // 显示规格选择
  showSpecSelector: function () {
    this.setData({
      showSpec: true
    });
  },
  
  // 隐藏规格选择
  hideSpecSelector: function () {
    this.setData({
      showSpec: false
    });
  },
  
  // 选择规格
  selectSpec: function (e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      selectedSpec: index,
      showSpec: false
    });
  },
  
  // 添加到购物车
  addToCart: function (e) {
    // 已经使用catchtap绑定，不需要再阻止冒泡
    
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    const foodId = this.data.food.id;
    
    // 检查是否登录
    if (!userInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 2000
      });
      
      // 跳转到登录页面
      setTimeout(() => {
        wx.navigateTo({
          url: '/pages/login/login'
        });
      }, 1500);
      
      return;
    }
    
    // 获取当前购物车中商品数量
    const count = (this.data.cartCount || 0) + 1;
    
    // 调用API添加到购物车
    app.globalData.api.cart.add({ food: foodId, count: 1 })
      .then(res => {
        // 更新本地购物车数据
        this.setData({ cartCount: count });
        
        wx.showToast({
          title: '已加入购物车',
          icon: 'success'
        });
        
        // 通知首页和分类页面刷新购物车数据
        const pages = getCurrentPages();
        pages.forEach(page => {
          if (page.route === 'pages/index/index' || page.route === 'pages/category/category') {
            if (page.getCartData) {
              page.getCartData();
            }
          }
        });
      })
      .catch(err => {
        console.error('添加到购物车失败', err);
        wx.showToast({
          title: '添加失败',
          icon: 'none'
        });
      });
  },
  
  // 从购物车减少商品
  minusFromCart: function(e) {
    // 已经使用catchtap绑定，不需要再阻止冒泡
    
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    const foodId = this.data.food.id;
    
    // 检查是否登录
    if (!userInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 2000
      });
      return;
    }
    
    // 获取当前购物车中商品数量
    const count = this.data.cartCount - 1;
    
    // 不使用update方法，而是直接使用add方法传递负数数量
    app.globalData.api.cart.add({ food: foodId, count: -1 })
      .then(res => {
        // 更新本地购物车数据
        this.setData({ cartCount: count > 0 ? count : 0 });
        
        wx.showToast({
          title: count === 0 ? '已移除商品' : '已减少数量',
          icon: 'success'
        });
        
        // 通知首页和分类页面刷新购物车
        const pages = getCurrentPages();
        pages.forEach(page => {
          if (page.route === 'pages/index/index' || page.route === 'pages/category/category') {
            if (page.getCartData) {
              page.getCartData();
            }
          }
        });
      })
      .catch(err => {
        console.error('更新购物车失败', err);
        wx.showToast({
          title: '操作失败',
          icon: 'none'
        });
      });
  },
  
  // 立即购买
  buyNow: function () {
    this.addToCart();
    
    // 跳转到购物车页面
    setTimeout(() => {
      wx.switchTab({
        url: '/pages/cart/cart'
      });
    }, 1000);
  },
  
  // 返回上一页
  goBack: function() {
    wx.navigateBack({
      delta: 1
    });
  },
  
  // 跳转到购物车页面
  goToCart: function() {
    wx.switchTab({
      url: '/pages/cart/cart'
    });
  },
  
  /**
   * 预览图片
   */
  previewImage(e) {
    const url = e.currentTarget.dataset.url;
    if (!url) return;
    
    // 获取所有图片URL
    let urls = [];
    if (this.data.food.images && this.data.food.images.length > 0) {
      urls = this.data.food.images.map(img => img.image_url || img);
    } else if (this.data.food.image || this.data.food.get_image) {
      urls = [this.data.food.image || this.data.food.get_image];
    }
    
    if (urls.length === 0) return;
    
    wx.previewImage({
      current: url,
      urls: urls
    });
  },
  
  /**
   * 重试加载数据
   */
  retry: function() {
    if (this.data.foodId) {
      this.setData({ loading: true });
      this.getFoodDetail(this.data.foodId);
    } else {
      wx.showToast({
        title: '无法重新加载',
        icon: 'none'
      });
    }
  }
}) 